/*
 * maz_cpnt_debugcmd.h
 *
 *  Created on: 2020年2月24日
 *      Author: mz8023yt@163.com
 */

#ifndef MAZ_CPNT_DEBUGCMD_H_
#define MAZ_CPNT_DEBUGCMD_H_

#include "maz_cpnt_list.h"
#include "maz_cpnt_debugcmd_config.h"
#include "maz_cpnt_debugcmd_portable.h"

/**
 * @brief 命令回调函数原型
 */
typedef int (*MAZCPNT_DEBUGCMD_HANDLER)(void *cmd, char *param);

/**
 * @brief 子命令类型
 */
typedef struct _MAZCPNT_SUB_CMD_
{
    const char *name;                   // 子命令名称
    const char *desc;                   // 子命令描述信息
    MAZCPNT_DEBUGCMD_HANDLER handler;   // 子命令回调函数
    struct list_head list;              // 子命令链表成员
} MAZCPNT_SUB_CMD;

/**
 * @brief 主命令类型
 */
typedef struct _MAZCPNT_MAIN_CMD_
{
    const char *name;                   // 主命令名称
    const char *desc;                   // 主命令描述信息
    MAZCPNT_DEBUGCMD_HANDLER handler;   // 主命令回调函数, 遍历子命令链表, 并打印字命令的描述信息
    MAZCPNT_SUB_CMD cmds;               // 主命令下绑定的子命令链表
    struct list_head list;              // 主命令链表成员
} MAZCPNT_MAIN_CMD;

/**
 * @brief API接口
 */
int MAZ_CPNT_debugcmd_init(void);
int MAZ_CPNT_debugcmd_mcmd_register(MAZCPNT_MAIN_CMD *mcmd);
int MAZ_CPNT_debugcmd_scmd_register(MAZCPNT_MAIN_CMD *mcmd, MAZCPNT_SUB_CMD *scmd);
int MAZ_CPNT_debugcmd_execute(char *str);
int MAZ_CPNT_debugcmd_automatic_completion(char *str, char *fill, int *length);
int MAZ_CPNT_debugcmd_param_only_space(char *str);

#endif /* MAZ_CPNT_DEBUGCMD_H_ */
